﻿using ExcellentProjectPlus.Dominio.Calificaciones.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;

namespace Aplicacion.Calificaciones.PromedioPeriodos
{
    public class ServicioDeGestionDePromedioPeriodos:IServicioDeGestionDePromedioPeriodos
    {
        #region Propiedades
        IServicioDeGestionDePromedioPeriodos _servicioDeAdministracionDePromedioPeriodos;
        #endregion

        #region Constructores
        public ServicioDeGestionDePromedioPeriodos(IServicioDeGestionDePromedioPeriodos servicioDeAdministracionDePromedioPeriodos)
        {
            _servicioDeAdministracionDePromedioPeriodos = servicioDeAdministracionDePromedioPeriodos;
        }
        #endregion
        public IEnumerable<ExcellentProjectPlus.Dominio.Calificaciones.Entidades.PromedioPeriodo> ObtenerPromedioPeriodos()
        {
            IEnumerable<PromedioPeriodo> resultado = null;
            var trxOptions = new TransactionOptions();
            trxOptions.IsolationLevel = IsolationLevel.ReadUncommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDePromedioPeriodos.ObtenerPromedioPeriodos();
                transaccion.Complete();
            }

            return resultado;
        }

        public ExcellentProjectPlus.Dominio.Calificaciones.Entidades.PromedioPeriodo ObtenerPromedioPeriodoPorId(int id)
        {
            PromedioPeriodo resultado = null;
            var trxOptions = new TransactionOptions();
            trxOptions.IsolationLevel = IsolationLevel.ReadUncommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDePromedioPeriodos.ObtenerPromedioPeriodoPorId(id);
                transaccion.Complete();
            }

            return resultado;
        }

        public void AgregarPromedioPeriodo(ExcellentProjectPlus.Dominio.Calificaciones.Entidades.PromedioPeriodo promedioPeriodo)
        {
            _servicioDeAdministracionDePromedioPeriodos.AgregarPromedioPeriodo(promedioPeriodo);
        }

        public void ModificarPromedioPeriodo(ExcellentProjectPlus.Dominio.Calificaciones.Entidades.PromedioPeriodo promedioPeriodo)
        {
            _servicioDeAdministracionDePromedioPeriodos.ModificarPromedioPeriodo(promedioPeriodo);
        }

        public void EliminarPromedioPeriodo(ExcellentProjectPlus.Dominio.Calificaciones.Entidades.PromedioPeriodo promedioPeriodo)
        {
            _servicioDeAdministracionDePromedioPeriodos.EliminarPromedioPeriodo(promedioPeriodo);
        }
    }
}
